package com.zgh.service;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zgh.domain.*;
import com.zgh.mapper.GroupMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class GroupService {
    @Autowired
    private GroupMapper groupMapper;
    /**
     * 查询全部群聊
     * @return 集合
     */
    public List<Group> findAll() {
        QueryWrapper<Group> queryWrapper =  new QueryWrapper<>();
        queryWrapper.eq("status",2);
        return groupMapper.selectList(queryWrapper);
    }

    /**
     * 根据功能区区域选择群聊
     * @param func 功能
     * @param region 区域
     * @return  集合
     */
    public List<Group> findByFunctionAndRegion(String func, String region) {
//        System.out.println(func);
//        System.out.println(region);
        List<Group> groupList = null;
        List<String> regionList = JSON.parseArray(region, String.class);
        QueryWrapper<Group> groupQueryWrapper = new QueryWrapper<>();
        String province = regionList.get(0);
        String city = regionList.get(1);
        String area = regionList.get(2);
        groupQueryWrapper.eq("status",2);
        if ("全部".equals(func)){
            if ("全部".equals(province)){

            }else if ("全部".equals(city)){
                groupQueryWrapper.like("position",province);
            }else if ("全部".equals(area)){
                groupQueryWrapper.like("position",city);
            }else{
                groupQueryWrapper.like("position",area);
            }
            groupList = groupMapper.selectList(groupQueryWrapper);
        }else{
            if ("全部".equals(province)){
                groupQueryWrapper.eq("function",func);
            }else if ("全部".equals(city)){
                groupQueryWrapper.like("position",province).eq("function",func);
            }else if ("全部".equals(area)){
                groupQueryWrapper.like("position",city).eq("function",func);
            }else{
                groupQueryWrapper.like("position",area).eq("function",func);
            }
            groupList = groupMapper.selectList(groupQueryWrapper);
        }
        return groupList;
    }

    /**
     * 根据条件查询群聊
     * @param condition 条件
     * @return 集合
     */
    public List<Group> searchGroupByCondition(String condition) {
        QueryWrapper<Group> groupQueryWrapper = new QueryWrapper<>();
        groupQueryWrapper.eq("status",2);
        groupQueryWrapper.and(wrapper-> wrapper.like("function",condition).or()
                .like("name",condition).or()
                .like("position",condition));
        return groupMapper.selectList(groupQueryWrapper);
    }

    /**
     * 根据id查询群聊
     * @param id id
     * @return 群聊
     */
    public Group searchGroupById(String id) {
        return groupMapper.selectById(id);
    }

    /**
     * 发布群聊
     * @param group 群聊
     * @return  1
     */
    public int postGroup(Group group) {
        return groupMapper.insert(group);
    }

    public ipageGroup getAllGroupInfo(int pagenum, int pagesize, String query) {
        List<Group> groupList = new ArrayList<Group>();
        // 设置条件构造器
        QueryWrapper<Group> wrapper = new QueryWrapper<>();
        wrapper.like("name", query);
        // 构造分页信息，其中的Page<>(page, PAGE_RECORDS_NUM)的第一个参数是页数，而第二个参数是每页的记录数
        IPage<Group> newsPage = new Page<>(pagenum, pagesize);
        // page(postPage, wrapper)这里的第一个参数就是上面定义了的Page对象，第二个参数就是上面定义的条件构造器对象，通过调用这个方法就可以根据你的分页信息以及查询信息获取分页数据
        IPage<Group> news1IPage = groupMapper.selectPage(newsPage, wrapper);
        // 封装数据，其中getRecords()是获取记录数，getCurrent()获取当前页数，getPages()获取总页数，getTotal()获取记录总数，还要其他更多的方法，大家可以自行查看，在这里就不过多赘述了
        groupList = news1IPage.getRecords();
        Long total = news1IPage.getTotal();
        ipageGroup pageNews = new ipageGroup();
        pageNews.setGroupList(groupList);
        pageNews.setTotal(total.intValue());
        return pageNews;
    }

    /**
     * 审核
     * @param id id
     * @param status status
     * @return i
     */
    public int audit(String id, String status) {
        UpdateWrapper<Group> queryWrapper = new UpdateWrapper<>();
        Group group = groupMapper.selectById(id);
        group.setStatus(Integer.parseInt(status));
        queryWrapper.eq("id",id);
        return groupMapper.update(group,queryWrapper);
    }
}
